import pandas as pd
import matplotlib.pyplot as plt

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 导入数据
data = pd.read_excel('第二章 图表(前15).xlsx', sheet_name='6 蝴蝶图', usecols='B:F', skiprows=1)

# 创建图形和轴
fig, ax = plt.subplots(figsize=(10, 6))

# 设置条形图的宽度
bar_width = 0.4
index = range(len(data))

# 计算条形图的偏移量
offset = bar_width * 500  # 增加偏移量，使条形图之间有更大的间隔

# 绘制2022年的条形图
bars1 = ax.barh(index, data['2022年销量']+offset, bar_width, color='skyblue', label='2022', left=offset)

# 绘制2021年的条形图
bars2 = ax.barh(index, -(data['2021年销量']+offset), bar_width, color='lightgreen', label='2021', left=-offset)

# 添加标题和标签
ax.set_title('2022年与2021年数据对比')

# 设置Y轴标签
ax.set_yticks(index)
ax.set_yticklabels([])  # 清空Y轴标签

# 在条形图中间添加Y轴标签
for i, region in enumerate(data['区域']):
    ax.text(0, i, region, ha='center', va='center', color='black')

# 在条形图中输出2021年和2022年的销量值
for i, (value2021, value2022) in enumerate(zip(data['2021年销量'], data['2022年销量'])):
    # 2021年销量值
    ax.text(-value2021 - offset - 0.1, i, f'{value2021}', ha='right', va='center', color='black')
    # 2022年销量值
    ax.text(value2022 + offset + 0.1, i, f'{value2022}', ha='left', va='center', color='black')

# 隐藏边框
for spine in ax.spines.values():
    spine.set_visible(False)

# 隐藏X轴和Y轴
ax.axis('off')

# 反转X轴，使2021年的条形图向左显示
ax.invert_xaxis()

# 将图例输出在条形图的上方
ax.legend(loc='upper center', bbox_to_anchor=(1, 1.1), ncol=2)

# 导出图片
#plt.savefig('D:/python charm/01/可视化/第二章/图片/对称条形图.png', dpi=300, bbox_inches='tight')

# 显示图形
plt.show()